上一篇文章講了如何生成.ui文件,並將.ui檔案轉換成.py檔。這時要注意的是,由於.py檔是由.ui檔的內容生成的,所以當我們的GUI介面發生更動,那.ui檔的內容也會更改,如此一來,由.ui檔生成的.py檔也會變動,這裡我們將由.ui檔生成的.py檔稱作介面程式。由於介面程式每次都會初始化,因此我們需要寫一個.py檔案去呼叫介面程式,這個呼叫用的就叫做邏輯程式,這樣介面與邏輯就會分成兩個不同的檔案,如此便可以達成介面與邏輯的分離。
要分離邏輯程式很簡單,首先創建一個first_main_win_run.py
檔,並繼承介面檔案的主視窗類別就好。
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.pushButton = QPushButton(self.centralwidget)
self.pushButton.setObjectName(u"pushButton")
self.pushButton.setGeometry(QRect(190, 110, 191, 121))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QMenuBar(MainWindow)
self.menubar.setObjectName(u"menubar")
self.menubar.setGeometry(QRect(0, 0, 800, 21))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QStatusBar(MainWindow)
self.statusbar.setObjectName(u"statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QMetaObject.connectSlotsByName(MainWindow)
# setupUi
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
self.pushButton.setText(QCoreApplication.translate("MainWindow", u"PushButton", None))
# retranslateUi
這是從上一篇文章的.ui檔生成的介面程式,接著我們用這個介面程式來寫邏輯程式。
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget
from first_main_win import *
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
if __name__ == "__main__":
app = QApplication(sys.argv)
main_win = MainWindow()
main_win.show()
sys.exit(app.exec())
這是邏輯程式的內容,可以看到邏輯程式只是繼承Ui_MainWindow,並呼叫setupUi方法而已。如此一來,當介面檔重新生成後,邏輯程式就可以使用新的介面程式來使用它。